package cn.hinglo.gameclaw.admin.service;

import cn.hinglo.gameclaw.admin.dao.FeedBackDao;
import cn.hinglo.gameclaw.data.entity.Result;
import cn.hinglo.gameclaw.data.utils.IdUtils;
import cn.hinglo.gameclaw.data.utils.ResultUtils;
import cn.hinglo.gameclaw.user.bean.FeedBack;
import cn.hutool.core.util.StrUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

import static cn.hinglo.gameclaw.data.utils.CheckDataUtils.checkIdResultUtils;
import static cn.hinglo.gameclaw.data.utils.FieldUtils.FEED_TYPE_1;
import static cn.hinglo.gameclaw.data.utils.FieldUtils.FEED_TYPE_2;


/**
 * @createTime: 2018/1/5
 * @author: HingLo
 * @description: 反馈服务层
 */
@Service
public class FeedBackService {
    private final FeedBackDao feedBackDao;

    @Autowired
    public FeedBackService(FeedBackDao feedBackDao) {
        this.feedBackDao = feedBackDao;
    }


    /**
     * 查询反馈类型
     *
     * @param status 反馈状态
     * @param type   查询类型
     * @return 返回结果
     */
    public Result listFeedBackService(boolean status, int type) {
        if (type == FEED_TYPE_1 || type == FEED_TYPE_2) {

            //通过条件 来获取Example
            FeedBack feedBack = new FeedBack().setStatus(status).setType(type);
            //真正的查询数据库
            List<FeedBack> list = feedBackDao.select(feedBack);


            return ResultUtils.success(list);
        }
        return ResultUtils.error("反馈类型不正确");
    }

    /**
     * 标记为已经处理
     *
     * @param id 反馈的唯一Id
     * @return 返回标记结果
     */
    public Result updateFeedBackService(String id) {
        //检测Id格式是否符合要求
        checkIdResultUtils(id);
        return feedBackDao.updateFeedBackDao(id) > 0 ? ResultUtils.success() : ResultUtils.error("标记失败");
    }


    /**
     * 添加反馈信息
     *
     * @param feedBack 反馈信息对象
     * @return 返回结果
     */
    public Result addFeedBackService(FeedBack feedBack) {
        int type = feedBack.getType();

        //检测反馈人是否存在
        String userId = feedBackDao.findByIdUserIdDao(feedBack.getUserId());
        //检测反馈人的信息是否存在
        if (!StrUtil.equals(feedBack.getUserId(), userId)) {
            return ResultUtils.error("反馈人的信息不存在");
        }
        //若果是房间反馈，name娃娃的编号一定要有
        if (type == FEED_TYPE_1) {
            if (feedBack.getCid() == null) {
                return ResultUtils.error("娃娃机房间不正确");
            }
        }


        if (type == FEED_TYPE_1 || type == FEED_TYPE_2) {
            feedBack.setDate(new Date());
            feedBack.setId(IdUtils.getId());
            feedBack.setStatus(false);
            return feedBackDao.insert(feedBack) > 0 ? ResultUtils.success() : ResultUtils.error("反馈失败");
        }
        return ResultUtils.error("反馈类型不正确");
    }

    /**
     * 删除已经处理的反馈信息
     *
     * @param id 反馈的唯一ID
     * @return 删除结果
     */
    public Result deleteFeedBackService(String id) {
        FeedBack feedBack = new FeedBack();
        feedBack.setId(id);
        feedBack.setStatus(true);

        return feedBackDao.delete(feedBack) > 0 ? ResultUtils.success() : ResultUtils.error("删除失败");
    }
}
